package com.simple.system.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.simple.framework.core.domain.vo.PagingVo;
import com.simple.system.domain.dto.ListSysSystemLogDto;
import com.simple.system.domain.entity.SysSystemLog;
import com.simple.system.mapper.SysSystemLogMapper;
import com.simple.system.service.SysSystemLogService;
import org.springframework.stereotype.Service;

import java.util.Set;

/**
 * @Description 系统操作日志表(SysSystemLog)表服务实现类
 * @Author xiaoke
 * @Date 2024/8/28 10:43
 * @Version 1.0
 */
@Service
public class SysSystemLogServiceImpl implements SysSystemLogService {

    private final SysSystemLogMapper sysSystemLogMapper;

    public SysSystemLogServiceImpl(SysSystemLogMapper sysSystemLogMapper) {
        this.sysSystemLogMapper = sysSystemLogMapper;
    }

    @Override
    public PagingVo<SysSystemLog> list(ListSysSystemLogDto dto) {
        LambdaQueryWrapper<SysSystemLog> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper
                .like(ObjectUtil.isAllNotEmpty(dto.getTitle()), SysSystemLog::getTitle, dto.getTitle())
                .and(ObjectUtil.isAllNotEmpty(dto.getOperName()), wrapper -> wrapper.like(SysSystemLog::getOperName, dto.getOperName()))
                .and(ObjectUtil.isAllNotEmpty(dto.getOperIp()), wrapper -> wrapper.like(SysSystemLog::getOperIp, dto.getOperIp()))
                .and(ObjectUtil.isAllNotEmpty(dto.getIpAddress()), wrapper -> wrapper.like(SysSystemLog::getIpAddress, dto.getIpAddress()))
                .and(ObjectUtil.isAllNotEmpty(dto.getOperUrl()), wrapper -> wrapper.like(SysSystemLog::getOperUrl, dto.getOperUrl()))
                .and(ObjectUtil.isAllNotEmpty(dto.getRequestMethod()), wrapper -> wrapper.like(SysSystemLog::getRequestMethod, dto.getRequestMethod()))
                .and(ObjectUtil.isAllNotEmpty(dto.getStatus()), wrapper -> wrapper.eq(SysSystemLog::getStatus, dto.getStatus()))
                .and(ObjectUtil.isAllNotEmpty(dto.getOperatorType()), wrapper -> wrapper.eq(SysSystemLog::getOperatorType, dto.getOperatorType()))
                .and(ObjectUtil.isAllNotEmpty(dto.getBusinessType()), wrapper -> wrapper.eq(SysSystemLog::getBusinessType, dto.getBusinessType()))
                .and(
                        ObjectUtil.isAllNotEmpty(dto.getStartTime(), dto.getEndTime()),
                        wrapper -> wrapper.between(SysSystemLog::getOperTime, dto.getStartTime(), dto.getEndTime())
                )
                .orderByDesc(SysSystemLog::getOperTime);
        Page<SysSystemLog> page = new Page<>(dto.getPageNum(), dto.getPageSize());
        sysSystemLogMapper.selectPage(page, queryWrapper);
        return new PagingVo<>(page.getRecords(), page.getTotal());
    }

    @Override
    public void create(SysSystemLog operLog) {
        sysSystemLogMapper.insert(operLog);
    }

    @Override
    public void delete(Set<Long> id) {
        sysSystemLogMapper.deleteBatchIds(id);
    }
}
